package br.com.gbvbahia.mybooks.fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
import br.com.gbvbahia.commons.Transacao.Transacao;
import br.com.gbvbahia.mybooks.R;
import br.com.gbvbahia.mybooks.constantes.TipoLivro;
import br.com.gbvbahia.mybooks.dao.EditoraDAO;
import br.com.gbvbahia.mybooks.dao.LivroDAO;
import br.com.gbvbahia.mybooks.modelos.EditoraVO;
import br.com.gbvbahia.mybooks.modelos.LivroVO;

/**
 * Fragmento com informações do livro. Modo
 * compatilibilidade:android.support.v4.app.Fragment;
 * 
 * @author Guilherme
 * 
 */
public class LivroInfoFragment extends FragmentMae {

	private TextView tNome;
	private TextView tAutor;
	private TextView tEditora;
	private TextView tEdicao;
	private TextView tAno;
	private TextView tIsbn;
	private TextView tTipo;
	private TextView tStatus;
	private TextView tDescricao;
	private TextView tNota;
	private TextView tAvaliacao;
	private LivroVO livro;
	private LivroDAO livroDAO;
	private EditoraDAO editoraDAO;

	/*
	 * Cria os daos e carrega o primeiro livro do BD se nenhum tiver pre
	 * carregado. (non-Javadoc)
	 * 
	 * @see android.support.v4.app.Fragment#onCreate(android.os.Bundle)
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		livroDAO = new LivroDAO(getActivity());
		editoraDAO = new EditoraDAO(getActivity());
		if (null == savedInstanceState) {
			livro = livroDAO.getFirst();
		} else {
			livro = (LivroVO) savedInstanceState.get(LivroVO.TAG);
		}
	}

	/*
	 * Carrega o layout, Define forma de preenchimento Recupera os objetos
	 * definidos no XML, definirTextsViews(View) insere informação do livro no
	 * livro carregado. (non-Javadoc)
	 * 
	 * @see
	 * android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
	 * android.view.ViewGroup, android.os.Bundle)
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.frag_livroinfo, null);
		view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
				LayoutParams.MATCH_PARENT));
		definirTextsViews(view);
		popularTextsViews(livro);
		return view;
	}

	/*
	 * Quando a tela entrar em foco irá recarregar as informações do livro,
	 * necessário para quando alterações forem feitas em outras telas sejam
	 * atualisadas nesta. (non-Javadoc)
	 * 
	 * @see android.support.v4.app.Fragment#onResume()
	 */
	@Override
	public void onResume() {
		super.onResume();
		if (livro != null && livro.getId() != null) {
			startTransacao(new Transacao() {
				@Override
				public void executar() throws Exception {
					livro = livroDAO.getByID(livro.getId());

				}

				@Override
				public void atualizarView() {
					if (getActivity() != null && !getActivity().isFinishing())
					popularTextsViews(livro);
				}
			});
		}
	}

	/**
	 * Popula os elementos da tela, TextView's, com informações do livro
	 * passado.
	 * 
	 * @param livro
	 */
	public void popularTextsViews(LivroVO livro) {
		if (livro != null) {
			tNome.setText(livro.getNomeLivro());
			tAutor.setText(livro.getAutorLivro());
			if (livro.getCdEditora() != null) {
				EditoraVO editora = editoraDAO.getByID(livro.getCdEditora());
				if (editora != null)
					tEditora.setText(editora.getNome());
				else 
					tEditora.setText("");
			}else {
				tEditora.setText("");
			}
			tEdicao.setText(livro.getEdicaoLivro() == 0 ? "" : Integer
					.toString(livro.getEdicaoLivro()));
			tAno.setText(livro.getAno() == 0 ? "" : Integer.toString(livro
					.getAno()));
			tIsbn.setText(livro.getIsbnLivro());
			if (livro.getTipo() != null) {
				tTipo.setText(getString(livro.getTipo().getHexaRString()));
			} else {
				tTipo.setText("");
			}
			if (livro.getStatus() != null) {
				tStatus.setText(getString(livro.getStatus().getHexaRString()));
			} else {
				tStatus.setText("");
			}
			tDescricao.setText(livro.getDescricao());
			tNota.setText(livro.getNota() == -1 ? "" : Integer.toString(livro
					.getNota()));
			tAvaliacao.setText(livro.getAvaliacao());
		}
	}

	/**
	 * Carrega os elementos internos com os declarados no XML.
	 * 
	 * @param v
	 */
	private void definirTextsViews(View v) {
		tNome = (TextView) v.findViewById(R.id.tNomeInsert);
		tAutor = (TextView) v.findViewById(R.id.tAutorInsert);
		tEditora = (TextView) v.findViewById(R.id.tEditoraInsert);
		tEdicao = (TextView) v.findViewById(R.id.tEdicaoInsert);
		tAno = (TextView) v.findViewById(R.id.tAnoInsert);
		tIsbn = (TextView) v.findViewById(R.id.tIsbnInsert);
		tTipo = (TextView) v.findViewById(R.id.tTipoInsert);
		tStatus = (TextView) v.findViewById(R.id.tStatusInsert);
		tDescricao = (TextView) v.findViewById(R.id.tDescricaoInsert);
		tNota = (TextView) v.findViewById(R.id.tNotaInsert);
		tAvaliacao = (TextView) v.findViewById(R.id.tAvaliacaoInsert);
	}
}
